package com.situ.fly.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.situ.fly.entity.User;
import com.situ.fly.service.UserService;

@Controller
@RequestMapping("/user")
/*
 * 给当前类中的所有的处理器添加一个URL前缀
 */
public class UserController {
   
	@Autowired
	
	private UserService userService;
    
    
    
	/**
     * 
          * 定义用户注册方法，返回注册视图
     * get请求是浏览器中默认的请求方式
          * 输入网址，点击超链接，表单，ajax的默认提交方式等
     * 
     */
	@GetMapping("/reg")//http://127.0.0.1:9000/user/reg
	public String reg() {
		return "user/reg";//指的是在user文件夹下的reg.html
	}
	
	/**
	 * 
	 * 编写一个Post方法，处理注册请求的具体方法
	 * 参数的自动注入
	 * SpringMVC实体类的注入,根据前段参数的名字与实体类的名字进行
	 */
	@PostMapping("/reg")
	public String reg(String vercode,String repassword,User user,
			HttpSession session,
			Model model) {
		//在处理器方法中。需要做一下几件事
		//会话：在一个时间段内，客户与服务器之间连续的多次请求
		//1、获取参数，由SpringMVC自动注入
		//2、调用servlet层进行业务的处理
		//校验验证码是否正确
		
		String oldVercode=(String) session.getAttribute("vercode");
		                               //转化成大写
		if (oldVercode==null||!vercode.toUpperCase().equals(oldVercode)) {
			//老的验证码不存在或者用户填写的与老的验证码不一样
			//1、向客户端页面返回错误信息
			model.addAttribute("error","验证码错误！！！");
			//2、返回注册页面 //请求转发的过程
			return "user/reg";
		}
		//调用Servuce层的对象
		int result=userService.reg(user,repassword);
		//3、跳转页面/返回数据
		if(result>0) {
			//重定向到一个新的页面
			//向客户端浏览器发送一条指令
			return "redirect:/user/login";
			
		}else if (result==-1) {
			model.addAttribute("error", "两次密码不一致!!!");
		}else if (result==-2) {
			model.addAttribute("error", "账号已被注册!!!");
		}else if (result==-3) {
			model.addAttribute("error", "昵称已被使用!!!");
		}else {
			model.addAttribute("error", "未知错误，请联系管理员!!!");
		}
		return "user/reg";
		
		
	}
	/**
	 * 
	 * 注册成功后转到登录界面
	 * 
	 * 
	 */
	@GetMapping("/login")
	public String login() {
		
		return "user/login";
		
		
	}
	//处理用户登录的操作
	@PostMapping("/login")
	public String login(User user,String vercode,
			HttpSession session,
			Model model) {
		//获取参数
		
		
		
		//处理业务
		//验证码
		String oldVercode=(String) session.getAttribute("vercode");
		if (oldVercode==null||!vercode.toUpperCase().equals(oldVercode)) {
			
			//错误信息
			model.addAttribute("error","验证码错误");
			return "user/login";
		}
		//跳转页面
		try {
			User loginUser=userService.login(user);
			//登录成功
			//保存登录信息
			session.setAttribute("user", loginUser);
			
			//跳转到主页
			
			return "redirect:/";
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//登录失败了
			model.addAttribute("error", e.getMessage());
		}
		//跳转页面
		return "user/login";
	}
	//用户退出的操作
	@GetMapping("/logout")
	
	public String logout(HttpSession session) {
		//清除登录信息。跳转页面
		//session.removeAttribute("user");
		session.invalidate();//清除session,清除所有
		return "redirect:/";
		
	}
	
}
